# 字典的定义，同样使用{}，不过存储的元素是一个个的: 键值对
#❗一个键值对算一个元素，“key”:value👉一个元素
# 如下语法:
# #定义字典字面量
# [key: value, key:value ,......key: value}
# #定义字典变量
# my_dict = {key: value, key: value，......，key: value}
# # 定义空字典
# my_dict ={}  # 空字典定义方式1
# my_dict = dict()  #空字典定义方式2

# #定义字典--key:value
# dict1={"🐖":100,"🐏":99,"🐎":88}
# #定义一个空字典--两种方式
# dict2={}#-方式1   #定义空集合set(),❗空集合不能用{}去表示，因为它被空字典dict用了❗
# dict3=dict()#-方式2
# print(f"字典1的内容是{dict1}，类型：{type(dict1)}")
# print(f"字典2的内容是{dict2}，类型：{type(dict2)}")
# print(f"字典3的内容是{dict3}，类型：{type(dict3)}")
#
# #定义重复key的字典
# dict1={"🐖":100,"🐖":99,"🐎":88}
# print(f'重复key的字典的内容是：{dict1}')
# #结果：重复key的字典的内容是：{'🐖': 99, '🐎': 88}
#
# #从字典中基于key获取内容value
# dict1={"🐖":100,"🐏":99,"🐎":88}
# weight=dict1["🐖"]
# print(f"🐖的体重是：{weight}")
# weight=dict1["🐏"]
# print(f"🐏的体重是：{weight}")


# 字典的Key和Value可以是任意数据类型 (Key不可为字典)
# 那么，就表明，字典是可以嵌套的
# 需求如下:记录学生各科的考试信息：
# 王：语文：77，数学:66,英语：33
# 周：语文：88，数学:86,英语：55
# 林：语文：99，数学:96,英语：66

# #定义嵌套的字典
# stu_score_dict={
#     '王':{
#         "语文":77,
#         "数学":66,
#         "英语":33,
#         },#逗号勿漏
#     '周': {
#         "语文": 88,
#         "数学": 86,
#         "英语": 55,
#         },
#     '林': {
#         "语文": 99,
#         "数学": 96,
#         "英语": 66,
#         }
# }
# print(f"学生的考试信息是{stu_score_dict}")
#
# # ❗从嵌套字典里提取信息用dict['外部key']["内部key"]
# #看一下林的数学成绩
# score=stu_score_dict["林"]["数学"]
# print(f"林的数学成绩是:{score}")
# #看一下王的语文成绩
# score2=stu_score_dict["王"]["语文"]
# print(f"王的语文成绩是：{score2}")
#
# # 字典的注意事项
# # 键值对的Key和Value可以是任意类型 (Key不可为字典)
# # 字典内Key不允许重复，重复添加等同于覆盖原有数据
# # 字典不可用下标索引，而是通过Kev检索Value
#
# # 新增元素.
# # 语法: 字典[Key]= Value，结果: 字典被修改，新增了元素,因为这个key原来没有
# dict1={"🐖":100,"🐏":99,"🐎":88}
# dict1["🐂"]=66
# print(dict1)
# #结果{'🐖': 100, '🐏': 99, '🐎': 88, '🐂': 66}
#
#
# # 更新元素.
# # 语法:字典[Key]= Value，结果: 字典被修改，元素被更新
# # 注意: 字典Key不可以重复，所以对已存在的Key执行上述操作，就是更新Value值
# dict1={"🐖":100,"🐏":99,"🐎":88}
# dict1["🐏"]=100
# print(dict1)
# #结果{'🐖': 100, '🐏': 100, '🐎': 88}

# #删除元素--dict.pop(value)
# dict1={"🐖":100,"🐏":99,"🐎":88}
# weight=dict1.pop("🐎")
# print(f"字典中被移除了一个元素，结果：{dict1}，🐎的体重是：{weight}")

# #清空元素--dict.clear()
# dict1={"🐖":100,"🐏":99,"🐎":88}
# dict1.clear()
# print(f"字典被清空了，内容是：{dict1}")

# #获取全部的key
# # 语法:字典.keys()，
# # 结果: 得到字典中的全部Key
# dict1={"🐖":100,"🐏":99,"🐎":88}
# name=dict1.keys()
# print(f"字典的key内容是：{name}")
#
# #遍历字典--先获取再用for进行遍历
# #法1--（通过获取全部key来完成遍历）
# dict1={"🐖":100,"🐏":99,"🐎":88}
# name=dict1.keys()
# print(f"字典的key内容是：{name}")
# for key in name:
#     print(type(key))
#     print(f"字典的key是：{key}")
#     print(f"字典的value是：{dict1[key]}")
#
# #法2--（直接对字典进行for循环，每一次循环都直接得到key）
# dict1={"🐖":100,"🐏":99,"🐎":88}
# for key in dict1:
#     print(f"字典的key是：{key}")
#     print(f"字典的value是：{dict1[key]}")

#❗因为字典不能进行索引所以不能用while循环进行遍历

# #统计字典内的元素数量--len（）
# dict1={"🐖":100,"🐏":99,"🐎":88}
# num=len(dict1)
# print(f"字典中元素的数量有{num}个。")
#❗一个键值对算一个元素，“key”:value👉一个元素



# 操作
# 字典[Key]             获取指定Key对应的Value值
# 字典[Key]= Value      添加或更新键值对
# 字典.pop(Key)         取出Key对应的Value并在字典内删除此Key的键值对
# 字典.clear()          清空字典
# 字典.keys()           获取字典的全部Key，可用于for循环遍历字典
# len(字典)             计算字典内的元素数量

# 字典有如下特点:
# 可以容纳多个数据
# 可以容纳不同类型的数据
# 每一份数据是Kev:Value键值对
# 可以通过Key获取到Value，Key不可重复 (重复会覆盖)-
# --新增和更新元素的语法一致，如果Key不存在即新增，如果Key存在即更新 (Key不可重复)
# 不支持下标索引
# 可以修改(增加或删除更新元素等)
# 支持for循环，不支持while循环

# 升职加薪
# 有如下员工信息，请使用字典完成数据的记录
# 并通过for循环，对所有级别为1级的员工，级别上升1级，薪水增加1000元

# dict1={"王":{
#         "部门":"科技部",
#         "工资":3000,
#         "级别":1,
# },
#         "周":{
#         "部门":"市场部",
#         "工资":5000,
#         "级别":2,
# },
#         "林":{
#         "部门":"市场部",
#         "工资":7000,
#         "级别":3,
# },
#         "张":{
#         "部门":"科技部",
#         "工资":4000,
#         "级别":1,
# },
#         "刘":{
#         "部门":"市场部",
#         "工资":6000,
#         "级别":2,
# }
# }
# print(f"升职加薪之前为{dict1}")
#1 .for循环遍历字典
# for name in dict1:
#         # print(f"dict1的key是{name}")
#         # print(f"dict1的value是{dict1[name]}")
#         #2.if条件判断符合条件的员工
#         if dict1[name]['级别']==1:
#                 #3.升职加薪操作
#                 #4.获取到员工的信息字典
#                 information=dict1[name]
#                 # print(information)
#                 # print(type(information))
#                 #修改员工信息
#                 information['级别']=2
#                 information["工资"]+=1000
#                 #将员工信息更新回dict1
#                 dict1[name]=information
# print(f"升职加薪之后为{dict1}")

class Animal(object):
    def __init__(self, age):
        self.age = age
        self.name = None
    def get_age(self):
        return self.age
    def get_name(self):
        return self.name
    def set_age(self, new_age):
        self.age = new_age
    def set_name(self, new_name):
        self.name = new_name
    def speak(self):
        print("xxxxxx")


#python-4.18
# #Add Items-添加项目
# set1 = {"apple","banana","cherry"}
# # set1.add("orange")
# # print(set1)
# set1.update({"orange"})#加个大括号{}，放在小括号里面双引号外面就不会将orange分开
# print(set1)
# # #
# thisset = {"apple","banana","cherry"}
# tropical = {"pineapple","mango","papaya"}
# thisset.update(tropical)
# print(thisset)
# dictionary-元素不可重复，即键不可重复，新键会覆盖原值
# dict1 ={"brand":"Ford",
#         "model":"Mustang",#逗号勿漏
#         "year":1964,
#         "year":2022,
#         }
# print(dict1)
# # key-value；键值对  键不可重复，一个键可对应多个值
# dict1 ={"brand":"Ford",
#         "model":"Mustang",#逗号勿漏
#         "year":1964,
#         }
# print(dict1["brand"])
# print(dict1[0])#KeyError: 0错误原因没有0键，修改方法，把year改为0这个键就会输出1964
# ***#dictionary 中删除指定items的tip---👉用for循环＋del
# myfamily = {
#   "child1" : {
#     "name" : "Emil",
#     "year" : 2004
#   },
#   "child2" : {
#     "name" : "Tobias",
#     "year" : 2007
#   },
#   "child3" : {
#     "name" : "Linus",
#     "year" : 2011
#   }
# }
# for x, y in myfamily.items():
#     del x, y['year']
#     print(y)























